﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Dominio
{
    public class Cliente : Persona
    {
        #region atributos

        private string mRUT;        

        #endregion

        #region propiedades

        public string RUT
        {
            get { return mRUT; }
            set { mRUT = value; }
        }        

        #endregion

        #region constructor
        
        public Cliente()
        {
            RUT = "";            
        }

        public Cliente(string unRUT)
        {
            RUT = unRUT;            
        }

        #endregion

        #region metodos

        public override string ToString()
        {
            return Nombre;
        }

        public override bool Equals(object obj)
        {
            return OID == ((Cliente)obj).OID;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        public List<Documento> listarFactCredPorImporte(double unImporte)
        {
            return null;
        }

        public void obtenerSaldoAFecha(DateTime unaFecha)
        {            
        }        

        public List<Documento> estadoDeCuentas(DateTime desde, DateTime hasta)
        {
            return null;    
        }

        public FacturaCredito buscarFacturaCredito(int id)
        {
            return null;
        }

        public NotaCredito buscarNotaCredito(int id)
        {
            return null;
        }

        public NotaDebito buscarNotaDebito(int id)
        {
            return null;
        }

        //    'hace un listado de todas las facturas de un cliente que contengan un saldo mayor al importe dado
        //    Public Function listarFactCredPorImporte(ByVal unI As Double) As ArrayList
        //        Dim unaFC As New FacturaCredito
        //        Dim lNueva As New ArrayList
        //        For Each unD As Documento In Me.documentos
        //            If unD.GetType.Equals(unaFC.GetType) Then
        //                If CType(unD, Factura).saldo >= unI Then
        //                    lNueva.Add(unD)
        //                End If
        //            End If
        //        Next
        //        Return lNueva
        //    End Function
        //    'hace un listado de los documentos del cliente a partir de una fecha determinada
        //    Public Sub obtenerSaldoAFecha(ByVal unaF As Date)
        //        Dim unaNC As New NotaCredito
        //        Dim unR As New Recibo
        //        Me.saldo = 0
        //        For Each unD As Documento In Me.documentos
        //            If unaF >= unD.fecha Then
        //                If unD.GetType.Equals(unaNC.GetType) Or unD.GetType.Equals(unR.GetType) Then
        //                    Me.saldo = Me.saldo - unD.monto
        //                Else
        //                    Me.saldo = Me.saldo + unD.monto
        //                End If
        //            End If
        //        Next
        //    End Sub
        //    'hace un listado de los documentos del cliente que lo afectan entre dos fechas 
        //    Public Function estadoDeCuentas(ByVal desde As Date, ByVal hasta As Date) As ArrayList
        //        Dim lNueva As New ArrayList
        //        Me.obtenerSaldoAFecha(desde)
        //        For Each unD As Documento In Me.documentos
        //            If unD.fecha >= desde And unD.fecha <= hasta Then
        //                lNueva.Add(unD)
        //            End If
        //        Next
        //        Return lNueva
        //    End Function
        //    'busca si el código de la factura es el mismo que el dado por parámetros
        //    Public Function buscarFacturaCredito(ByVal id As Integer) As FacturaCredito
        //        Dim aux As New FacturaCredito
        //        Dim unD As Documento
        //        For Each unD In Me.documentos
        //            If unD.GetType.Equals(aux.GetType) Then
        //                If unD.numerador = id Then
        //                    aux = CType(unD, FacturaCredito)
        //                    Return aux
        //                End If
        //            End If
        //        Next
        //        Return aux
        //    End Function
        //    'busca si el código de la nota es el mismo que el dado por parámetros
        //    Public Function buscarNotaCredito(ByVal id As Integer) As NotaCredito
        //        Dim aux As New NotaCredito
        //        Dim unD As Documento
        //        For Each unD In Me.documentos
        //            If unD.GetType.Equals(aux.GetType) Then
        //                If unD.numerador = id Then
        //                    aux = CType(unD, NotaCredito)
        //                    Return aux
        //                End If
        //            End If
        //        Next
        //        Return aux
        //    End Function
        //    'busca si el código de la nota es el mismo que el dado por parámetros
        //    Public Function buscarNotaDebito(ByVal id As Integer) As NotaDebito
        //        Dim aux As New NotaDebito
        //        Dim unD As Documento
        //        For Each unD In Me.documentos
        //            If unD.GetType.Equals(aux.GetType) Then
        //                If unD.numerador = id Then
        //                    aux = CType(unD, NotaDebito)
        //                    Return aux
        //                End If
        //            End If
        //        Next
        //        Return aux
        //    End Function
        //#End Region
        
        #endregion

    }
}
